iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 27
1
Software Development

30天完成家庭任務平台系列 第 27

30天完成家庭任務平台:第二十七天

  • 分享至 

  • xImage
  •  

駐列的目的是希望在幕後執行耗時的工作來加快反應時間,對於不熟悉駐列的人,Laracast一開始提供小例子練習:假設 Log裡面出現hello, world! 是耗時的工作,所以我們不希望同步執行這個工作。

  1. 沒有駐列的狀況,當進到首頁時,Log裡面出現hello, world!,螢幕會出現Finished。
Route::get('/', function () {
    logger('hello, world!');
    return 'Finished';
});

https://ithelp.ithome.com.tw/upload/images/20201012/20129592WZldyyOthu.png

https://ithelp.ithome.com.tw/upload/images/20201012/20129592diSJ4CbHHf.png

  1. 轉換到使用駐列的狀況,用駐列控制工作執行的順序

Laravel提供多種的駐列給開發者使用,像Redis等等,最簡單的就是使用database,所以這裡用database示範。

(1)用database做出駐列

  • 將.env檔中的QUEUE_CONNECTION改成QUEUE_CONNECTION=database。
  • 利用php artisan queue:tablephp artisan migrate去做出駐列。

(2) 將首頁的路由邏輯改為下列,進到首頁,則螢幕會出現Finished,但Log裡面沒有出現hello, world。

Route::get('/', function () {
    dispatch(function(){logger('hello,world');});
    return 'Finished';
});

(3) 觀察jobs資料表,會多出資料:

...
{\\logger('hello,world');}\";s:5:\"scope\";s:37:\"Illuminate\\Routing\\RouteFileRegistrar\";s:4:\"this\";N;s:4:\"self\";s:32:\"00000000517307660000000033b29227\";}}s:16:\"failureCallbacks\";a:0:
...

(4) 執行php artisan queue:work,此時Log裡面出現hello, world,透過駐列的功能可以將耗時的工作存到駐列中後等待執行,加快使用者回應速度。

(5) 如果邏輯更複雜,使用Laravel提供的Job類別。

  • php artisan make:job LoggerJob

  • 將操作邏輯加到handle方法中。

class LoggerJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    protected $user;
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct()
    {
       
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        logger('hello,world ');
    }
  • 一個LoggerJob實體被產生並送到駐列中,jobs資料表儲存LoggerJob資料。
Route::get('/', function () {
    dispatch(new LoggerJob());
    return 'Finished';
 });
...
:{"commandName":"App\\Jobs\\LoggerJob","command":"O:18:\"App\\Jobs\\LoggerJob\":10:{s:7:\"\u0000*\u0000user\";N;s:3:\"job\";N;s:10:\"connection\";N;s:5:\"queue\";N;s:15:\" ...                      

上一篇
30天完成家庭任務平台:第二十六天
下一篇
30天完成家庭任務平台:第二十八天
系列文
30天完成家庭任務平台30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言